package goroutine

import (
	"fmt"
	"time"
)

//goroutine 是轻量级线程，调度由golang运行时进行管理的
func say(s string) {
	for i := 0; i < 5; i++ {
		time.Sleep(100 * time.Millisecond)
		fmt.Println(s)
	}
}
func TestGo() {
	go say("hello")
	time.Sleep(1 * time.Second)
}

//channel
//ch <- v    // 把 v 发送到通道 ch
//v := <-ch  // 从 ch 接收数据
// 并把值赋给 v
func TestChannel() {
	var sums = []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
	c := make(chan int, 3)
	go Sum(sums, c)
	for i := range c {
		fmt.Println(i)
	}
	//for{
	//	fmt.Println(<-c)
	//}

}
func Sum(ints []int, c chan int) {
	for value := range ints {
		c <- value
	}
	close(c)
}

//channel缓冲区
func TestChannelBuffer() {
	// 这里我们定义了一个可以存储整数类型的带缓冲通道
	// 缓冲区大小为2
	ch := make(chan int, 3)

	// 因为 ch 是带缓冲的通道，我们可以同时发送两个数据
	// 而不用立刻需要去同步读取数据
	ch <- 1
	ch <- 2

	// 获取这两个数据
	fmt.Println(<-ch)
	fmt.Println(<-ch)
}
